package main

import "fmt"

// 定义一个Sayer接口
type Sayer interface {
	say()
}

type dog struct{}

type cat struct{}

// 值类型接收者实现接口
func (d dog) say() {
	fmt.Println("狗：汪汪")
}

// 指针类型接收者实现接口
func (c *cat) say() {
	fmt.Println("猫：喵喵")
}

func main() {
	var x Sayer
	d1 := dog{}
	x = d1 //x可以接受dog类型
	x.say()
	d2 := &dog{}
	x = d2 //x可以接受*dog类型
	x.say()

	//c1 := cat{}
	//x = c1       //报错，x不可以接受cat类型
	x.say()
	c2 := &cat{}
	x = c2 //x可以接受*cat类型
	x.say()
}
